console.log('foo.js init');

const name = 'foo.js';

/**
 * 第一种导出方式（分别导出/命名导出）
 * 需要注意的是 export { xxx } 中的{} 并不是一个对象，而只是一个固定的语法
 * 里面存放要导出的变量
 *
 * 但是很少会在导出时起别名，当名称重复时，我们一般在导入时通过起别名的形式避免变量名称冲突
 */
export { name };

// --------------------------------------------------

/**
 * 使用上面这种方式，在导入时，需要包装导入的名称与导出时的名称一致
 * 但是我们可以起别名，在导出时可以起别名，那自然导入时也可以起别名
 *
 * 导出时起别名
 */

const _alias = 'xxxx foo';

export { _alias as alias };

// 第二种方式导出 直接导出变量（此种方式与以上等效）是第一种的变种
export const filePath = './src/foo.js';

// --------------------------------------------------

// 第三种导出方式 也叫默认导出
export default {
  name,
  _name: `__${name}`,
};

/*
  // 默认导出的另一种用法

  const test = 'xxx__test';

  // 通过export 导出变量，但是我们将其中一个变量设置别名为default
  // 一旦设置别名为 default，那么下面的这种方式
  // 相当于 export { test as default } === export default test

  export { 
    test as default 
  };

  在使用时 如:

  import moduleA from './foo.js'

  moduleA === 'xxx__test'
*/

// const test = 'xxx__test';

// export { test as default };

// --------------------------------------------------

// 以上导出方式，均不限制导出的变量值类型

/*
  export const a = '1'

  export const a = () => {}

  export default 1

  export default () => {}

  export default { xxx: ''}
*/
